package ru.st.selenium.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

//Abstract class representation of a Page in the UI. Page object pattern
//Абстрактное представление класса страницы в пользовательском интерфейсе.
 
public abstract class Page {

	protected WebDriver driver;
	protected WebDriverWait wait;
	protected PageManager pages;

	/*
	 * Constructor injecting the WebDriver interface
	 * 
	 * @param webDriver
	 */
	public Page(PageManager pages) {
		this.pages = pages;
		driver = pages.getWebDriver();
		wait = new WebDriverWait(driver, 10);
	}

	public WebDriver getWebDriver() {
		return driver;
	}

	public String getTitle() {
		return driver.getTitle();
	}

	public Page ensurePageLoaded() { // Метод - проверяет, где мы находимся
										// здесь и сейчас, возвращает данную страницу
										// ждет загрузки страницы
		return this;
	}

	public boolean waitPageLoaded() { // Метод обращается к ensurePageLoaded и
										// возвращает булевское значение 
										// (false - не дождались загрузки стр.; true - дождались) ждет загрузки страницы
		try {
			ensurePageLoaded();
			return true;
		} catch (TimeoutException to) {
			return false;
		}
	}

	// -----------------------------------Waiting------------------------------------------------
	// Подождать в течение определенного количества времени
	public void waitTime(int seconds) {
		try {
			Thread.sleep(seconds * 1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// Пример - waitTime(5);
	}

	// Подождать пока отобразится элемент на странице
	public WebElement waitForPageUntilElementIsVisible(By locator,
			int maxSeconds) {
		return (new WebDriverWait(driver, maxSeconds)).until(ExpectedConditions
				.visibilityOfElementLocated(locator));
		// Пример -
		// waitForPageUntilElementIsVisible(By.xpath("//*[@id='bAddRec-btnIconEl']"),
		// 5000);
	}
}


